package sanshi.contect.proxy.v3_1;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class TimeHandler implements InvocationHandler {

    Tank tank;

    public TimeHandler(Tank tank) {
        this.tank = tank;
    }

    /**
     *
     * @param proxy 生成的代理对象。有的时候业务是需要调用代理类的业务。
     * @param method 代理的那个方法
     * @param args 方法所需要的参数
     * @return 这个方法的返回值是根据被代理类的被代理方法返回值决定的。
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        long startTime = System.currentTimeMillis();
        Object invoke = method.invoke(tank, args);
        long endTime = System.currentTimeMillis();

        System.out.println("tank move time : " + (endTime - startTime) + "ms");
        return invoke;
    }
}
